/**
 * 给定两个整数n和k，返回1...n中所有可能的k个数的组合
 * 示例:
 *  输入: n = 4, k = 2
 *  输出: [
 *     [2, 4],
 *     [3, 4],
 *     [2, 3],
 *     [1, 2],
 *     [1, 3],
 *     [1, 4],
 *  ]
*/
function combinations (n, k) {
    const result = [];
    // 回溯法
    function backtracking (n, k, begin, list) {
        // 如果长度等于目标个数添加进结果集中
        if (list.length === k) {
            result.push([...list]);
            return;
        }
        for (let i = begin; i <= n; i++) {
            list.push(i);
            backtracking(n, k, i + 1, list);
            list.pop();
        }
    }
    backtracking(n, k, 1, []);
    return result;
}

console.log(combinations(4, 3));